// 导入 express 模块
const express = require('express')
// 创建 express 的服务器实例
const app = express()



// 导入并配置解析前端传参的的中间件
const parser = require('body-parser')
// 请求参数过大，例如base64编码的图片，就用下面的配置
app.use(parser.urlencoded({ extended: false, limit: '600mb'})) 
app.use(parser.json({limit: '600mb'}))

// 一定要在路由之前配置解析 Token 的中间件
const expressJWT = require('express-jwt')
const config = require('./config')
// 除了api开头的地址，其他的 URL 都需要验证 Token 的合法性
// 验证通过之后，会把解析出来的用户对象，挂载到 req.user 属性中，例如：req.user.id
app.use((expressJWT({ secret: config.jwtSecretKey }).unless({ path: [/^\/Noerify/] }), function (err, req, res, next) {
    // 如果用户的 Token 无效
    if (err.name === 'UnauthorizedError') {
        // 响应给客户端 Token 无效的信息
        return res.status(401).send({ status: 1, message: '无效的 Token！' })
    }
    next()
}))

// 一定要在路由之前，封装 res.cc 函数
app.use((req, res, next) => {
    // status 默认值为 1，表示失败的情况
    // err 的值，可能是一个错误对象，也可能是一个错误的描述字符串
    res.cc = function (err, status = 1) {
        res.send({
        status,
        message: err instanceof Error ? err.message : err,
        })
    }
    next()
})

// 导入并使用用户路由模块
const userRouter = require('./router/user')
app.use('/Noerify', userRouter)

// 导入并使用用户路由模块
const typeRouter = require('./router/type')
app.use('/Noerify', typeRouter)

// 导入并使用商品路由模块
const shopRouter = require('./router/shop')
app.use('/Noerify', shopRouter)

// 导入并使用订单路由模块
const orderRouter = require('./router/order')
app.use('/api', orderRouter)



// write your code here...
// 调用 app.listen 方法，指定端口号并启动web服务器
app.listen(3000, function () {
console.log('api server running at http://127.0.0.1:3000')
})